<?php
/* ----------------------------------------
** JsTpl
** JsTpl.class.php
** ----------------------------------------
** Moteur de template utillisant les regex et une syntaxe ressamblante a KaraTemplate.
** ----------------------------------------
** Créer par J-S, vendredi 29 mai 2009
** Derniere modification le mardi 9 juin 2009
*/

require "JsTplConf.inc.php";
require "modules/modules.class.php";

class JsTpl
{
	private $templates_dir		= "Templates/templates";		// Dossier de templates
	private $compile_dir		= "Templates/templates";		// Dissier de templates compillés
	private $templates_ext		= ".tpl";						// Extention des templates
	private $vars				= array();						// Variables des templates
	
	
	// view ( const string Template )
	// Affiche un fichier tpl
	public function view($tpl)
	{
		$this->compiller($tpl);
		
		$path = $this->compile_dir."/".$tpl.".compilled.php";
		include($path);
	}
	
	// add (const string nom, const string valeur)
	// Ajoute une variable accessible au templates
	public function add($nom, $data)
	{
		$this->vars[$nom] = $data;
	}
	
	
	
	// compiler( const string Template )
	// Verifi si le fichier est compillé, si oui, renvoi true, si non, le compile et renvoi false
	private function compiller($tpl)
	{
		$path = $this->compile_dir."/".$tpl.".compilled.php";
		
		if (file_exists($file)) // si le tpl est compillé
		{
			return true;
		}
		else
		{
			$tplPath = $this->templates_dir."/".$tpl.$this->templates_ext;
			$cnt1 = $this->parser(file_get_contents($tplPath));
			$date = date('d/m/Y\-s:i:H');
			$cnt2 = '<?php
/* Template: $tpl.tpl
** Fichier : $tpl.compilled.php
** Fichier compille par JsTpl v2
** Date de compillation: $date
*/
?>';
			$cnt = $cnt2.$cnt1;
			file_put_contents($path, $cnt);
		}
	}
	
	// parser ( const string Texte )
	// Parser le texte et renvoi le resultat
	private function parser($txt)
	{
		$ret = preg_replace("#\|\{(.+)\}\|#U",					'$this->vars["$1"]',					$txt);	// Variable sans echo ni php
		$ret = preg_replace("#\{(.+)\}#U",						'<?php echo $this->vars["$1"]; ?>',		$ret);	// Variable avec echo
		$ret = preg_replace("#\<JsTpl\.(.+)\((.+)\) \/\>#U",	'<?php JsTplMod::lancer($1, $2); ?>',		$ret);	// Module
		$ret = preg_replace("#\<if cond\=\"(.+)\"\>#U",			'<?php if ($1) { ?>',					$ret);	// If
		$ret = preg_replace("#\<\/if\>#U",						'<?php } ?>',							$ret);	// - Fin de if
		$ret = preg_replace("#\<elseif cond\=\"(.+)\"\/\>#U",	'<?php } elseif ($1) { ?>',				$ret);	// - ElseIf
		$ret = preg_replace("#\<else \/\>#U",					'<?php } else { ?>',					$ret);	// - Else
		$ret = preg_replace("#\<foreach var\=\"(.+)\" as\=\"(.+)\"\>#U",'<?php foreach ($1 as $2) { ?>',$ret);	// Foreach
		$ret = preg_replace("#\<\/foreach\>#U",					'<?php } ?>',							$ret);	// - Fin de Foreach
		return $ret;
	}
}

?>